package cn.wolfcode.luowowo.listener;

import cn.wolfcode.luowowo.cache.service.IStrategyStatisVOService;
import cn.wolfcode.luowowo.cache.vo.StrategyStatisVO;
import cn.wolfcode.luowowo.domain.Strategy;
import cn.wolfcode.luowowo.service.IStrategyService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

import java.util.List;

//redis数据初始化监听器
//spring 容器一准备好后，马上执行数据初始化操作  将mongodb数据库中vo数据加载进redis中
@Component
public class RedisDateInitListener implements ApplicationListener<ContextRefreshedEvent>{

    @Autowired
    private IStrategyService strategyService;

    @Autowired
    private IStrategyStatisVOService strategyStatisVOService;
    //spring容器创建完成（aop ioc di）的时候开始执行这个方法
    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        //查询出所有的攻略明细对象
        //根据攻略明细对象创建出一个个vo对象
        //如果vo对象在redis中存在，那么要跳过本次循环  因为前端页面操作后vo对象中数据会发生变化，但是还没有持久化到mongodb中
        //如果再初始化一次，会覆盖掉最新的数据，也就是造成数据丢失的风险
        System.out.println("---------vo对象开始创建---------");
        List<Strategy> list = strategyService.list();
        for(Strategy strategy:list){
            if(strategyStatisVOService.isExistVO(strategy.getId())){
                continue;
            }
            StrategyStatisVO vo = new StrategyStatisVO();
            BeanUtils.copyProperties(strategy,vo);
            vo.setStrategyId(strategy.getId());
           strategyStatisVOService.setStrategyStaticVO(vo);
        }
        System.out.println("---------vo对象创建结束---------");
    }
}
